﻿using Sys.Core.Models.Dto;
using Sys.Core.Models.VO;
using MiniFox.Components;

namespace Sys.Core.Providers
{
    /// <summary>
    /// 
    /// </summary>
    [AutoRegister]
    public interface IMenuProvider
    {
        #region menu
        /// <summary>
        /// 按app 获取菜单目录
        /// </summary>
        /// <param name="appId"></param>
        /// <returns></returns>
        IEnumerable<MenuVo> GetMenuItems();
        /// <summary>
        /// 
        /// </summary>
        /// <param name="appId"></param>
        /// <param name="menuId"></param>
        /// <returns></returns>
        MenuVo GetMenuItem(string appId, string menuId);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="menuPath"></param>
        /// <returns></returns>
        MenuVo GetMenuItem(string menuPath);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="menuPath"></param>
        /// <returns></returns>
        bool MenuExists(string menuPath);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="menuItem"></param>
        /// <returns></returns>
        bool CreateMenuItem(MenuDto menuItem);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="menuItem"></param>
        /// <returns></returns>
        bool UpdateMenuItem(MenuDto menuItem);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="appId"></param>
        /// <param name="menuId"></param>
        /// <returns></returns>
        bool DeleteMenuItem(string appId, string menuId);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="menuPath"></param>
        /// <returns></returns>
        bool DeleteMenuItem(string menuPath);
        #endregion

        #region menu module
        /// <summary>
        /// 
        /// </summary>
        /// <param name="appId"></param>
        /// <param name="menuId"></param>
        /// <returns></returns>
        IEnumerable<MenuModuleVo> GetMenuModules(string appId, string menuId);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="appId"></param>
        /// <param name="menuId"></param>
        /// <param name="modules"></param>
        void CreateMenuModules(string appId, string menuId, string[] modules);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="menuModule"></param>
        void UpdateMenuModule(MenuModuleDto menuModule);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="appId"></param>
        /// <param name="menuId"></param>
        /// <param name="modules"></param>
        void DeleteMenuModules(string appId, string menuId, string[] modules);

        #endregion

        #region menu link
        /// <summary>
        /// 
        /// </summary>
        /// <param name="appId"></param>
        /// <param name="menuId"></param>
        /// <returns></returns>
        IEnumerable<MenuLinkVo> GetMenuLinks(string appId, string menuId);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="link"></param>
        /// <returns></returns>
        bool CreateMenuLink(MenuLinkDto link);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="link"></param>
        /// <returns></returns>
        bool UpdateMenuLink(MenuLinkDto link);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="linkId"></param>
        /// <returns></returns>
        bool DeleteMenuLink(string linkId);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="linkID"></param>
        /// <returns></returns>
        MenuLinkVo GetMenuLink(string linkID);

        #endregion
    }
}
